#ifndef __M_CONSUMER_H__
#define __M_CONSUMER_H__
#include "../mqcommon/mq_msg.pb.h"
#include "../mqcommon/mq_logger.hpp"
#include <functional>
#include <memory>
#include <mutex>
#include <string>
#include <sys/types.h>
#include <unordered_map>
#include <vector>
#include <algorithm>


namespace zymq 
{
    using ConsumerCallback = std::function<void(const std::string &tag, const zymq::BasicProperties *bp, const std::string &body)>;
    
    // 消费者
    struct Consumer
    {
        using ptr = std::shared_ptr<Consumer>;
        
        std::string tag;// 消费者标签，用于唯一标识一个消费者
        std::string qname;// 消费者关联的队列名称
        bool auto_ack;// 是否自动确认消息
        ConsumerCallback callback; // 当有消息到达时的回调函数，作用是处理信息
        
        Consumer(){}
        Consumer(const std::string &ctag, const std::string &queue_name, bool ack_flag, const ConsumerCallback &cb)
            :tag(ctag), qname(queue_name), auto_ack(ack_flag), callback(cb) {}
    };
}

#endif